﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using BackEndSystemWebTv.CC;
using BackEndSystemWebTv.Enums;

//TODO:Datum check aanpassen bij het verwijderen van logs
//De accordion items geschikt maken voor asynchro update

namespace BackEndSystemWebTv.Controls
{
    public partial class LogOverzicht : System.Web.UI.UserControl
    {
        private CCLogsBekijken ccLogBekijken;
        private CCLogsVerwijderen ccLogVerwijderen;

        protected void Page_Load(object sender, EventArgs e)
        {
            //Geef datagridview weer;behalve bij onderdeel "Logs verwijderen". Hierdoor krijgt de gebruiker 
            //ook de melding te zien wat verwijderd is.
            if (Accordion1.SelectedIndex != 5)
                Accordion1.SelectedIndex = 6; 

            tbVerwijderdatum.Attributes.Add("readonly", "readonly"); //Zorgt ervoor dat de textbox readonly wordt. 
            DatumLinks.Attributes.Add("readonly", "readonly");
            DatumRechts.Attributes.Add("readonly", "readonly");

            ccLogBekijken = new CCLogsBekijken();
            ccLogVerwijderen = new CCLogsVerwijderen();

            lbResultaat.Text = "";
            if(!IsPostBack)
            {
                VulZoekFunctieItems();
            }
        }

        /// <summary>
        /// Vul de optie "Zoek log op gebruiker" met de aanwezige gebruikersnamen
        /// </summary>
        private void VulZoekFunctieItems()
        {
            CCGebruikersBeheer gb = new CCGebruikersBeheer();
            List<string> lijst = gb.GebruikersnamenOphalen();
            foreach (string s in lijst)
            {
                LBGebruikerLijst.Items.Add(s);
            }

            CCSocialMediaBeheer sm = new CCSocialMediaBeheer();
            List<string> smLijst = sm.HaalAlleSocialMedia();
            foreach (string s in smLijst)
            {
                LBSocialMedia.Items.Add(s);
            }
        }

        /// <summary>
        /// Haal alle logs op uit de database
        /// </summary>
        protected void HaalLogsOp_Click(object sender, EventArgs e)
        {
            HaalAlleLogsOp();
        }

        /// <summary>
        /// Haal alle logs op uit de database.
        /// </summary>
        private void HaalAlleLogsOp()
        {
            GridView1.Columns.Clear();
            List<LogBestand> logLijst = ccLogBekijken.LogsOphalen();
            GridView1.DataSource = logLijst;
            GridView1.DataBind();
        }

        /// <summary>
        /// Verwijder een log o.b.v. aangegegeven tijd. Alle logs voor de aangegeven 
        /// tijd worden verwijderd.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnVerwijder_Click(object sender, EventArgs e)
        {
            if (tbVerwijderdatum.Text == "")
            {
                lbResultaat.Text = "Geef een geldige datum in";
                return;
            }
            
            DateTime eindDatum = Convert.ToDateTime(tbVerwijderdatum.Text);
            EVerwijderLogResultaat verwijderLogsDoorLeeftijd = ccLogVerwijderen.VerwijderLogsDoorLeeftijd(eindDatum);

            switch (verwijderLogsDoorLeeftijd)
            {
                case EVerwijderLogResultaat.DatabaseNietToegankelijk:
                    lbResultaat.Text = "Database niet toegankelijk";
                    break;
                case EVerwijderLogResultaat.GeenMatchendeLogsGevonden:
                    lbResultaat.Text = "Geen logs om te verwijderen.";
                    break;
                case EVerwijderLogResultaat.Succes:
                    lbResultaat.Text = String.Format("Logs aangemaakt voor {0} zijn verwijderd.", tbVerwijderdatum.Text);
                    break;
            }
            HaalAlleLogsOp(); //Vernieuw data
        }

        /// <summary>
        /// Geef de beschikbare gebruikersnamen weer wanneer
        /// er op het label geklikt wordt.
        /// </summary>
        protected void LBGebruiker_Click(object sender, EventArgs e)
        {
            //if (!IsPostBack)
            //{
                if (LBGebruikerLijst.SelectedIndex >= 0)
                {
                    string gebruikersnaam = LBGebruikerLijst.SelectedItem.Text;
                    List<LogBestand> logLijst = ccLogBekijken.LogsOphalen(gebruikersnaam);
                    GridView1.DataSource = logLijst;
                    GridView1.DataBind();
                }
            
            //}
        }

        /// <summary>
        /// Geef de beschikbare socialemedia weer wanneer
        /// er op het label geklikt wordt.
        /// </summary>
        protected void LBSocialMedia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if(LBSocialMedia.SelectedIndex >=0)
            {
                ESocialMedium socialMedium = (ESocialMedium) Enum.Parse(typeof(ESocialMedium), LBSocialMedia.SelectedItem.Text);
                List<LogBestand> logLijst = ccLogBekijken.LogsOphalen(socialMedium);
                GridView1.DataSource = logLijst;
                GridView1.DataBind();
            }
        }

        /// <summary>
        /// Haal de logs op met de gespecificeerde tijdsperiode
        /// </summary>
        protected void BtnLogsOpDatum_Click(object sender, EventArgs e)
        {
            DateTime datumLinks = Convert.ToDateTime(DatumLinks.Text);
            DateTime datumRechts = Convert.ToDateTime(DatumRechts.Text);
            LogsOphalen(datumLinks, datumRechts);
        }

        /// <summary>
        /// Haal de logs op met de gespecificeerde tijdsperiode
        /// </summary>
        /// <param name="datumLinks">Minimale datum</param>
        /// <param name="datumRechts">Maximale datum</param>
        private void LogsOphalen(DateTime datumLinks, DateTime datumRechts)
        {
            List<LogBestand> logLijst = ccLogBekijken.LogsOphalen(datumLinks, datumRechts);
            GridView1.Columns.Clear();
            GridView1.DataSource = logLijst;
            GridView1.DataBind();
        }

        /// <summary>
        /// Zoeken van logs o.b.v. een opgegeven zoekterm
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void btnZoekterm_Click(object sender, EventArgs e)
        {
            if (tbZoekterm.Text.Length > 2)
            {
                string zoekterm = tbZoekterm.Text;
                ccLogBekijken = new CCLogsBekijken();
                List<LogBestand> logLijst = ccLogBekijken.LogsOphalenZoekterm(zoekterm);
                GridView1.DataSource = logLijst;
                GridView1.DataBind();
            }

        }

        

        
    }
}